From 95959ef470e00e0f0c2f6a3684c3693cd0fb3df3 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 7 Sep 2014 01:52:45 +0200 Subject: [PATCH] overlay: Handle overlays when no main widget exists Just pretend that the main widget is an empty widget the size of the overlay. Makes it possible to write testcases where no size requests are run on overlay widgets before size_allocate() is called. Testcase included. --- gtk/gtkoverlay.c | 10 +++--- testsuite/reftests/Makefile.am | 2 ++ .../reftests/overlay-no-main-widget.ref.ui | 33 +++++++++++++++++++ testsuite/reftests/overlay-no-main-widget.ui | 26 +++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 testsuite/reftests/overlay-no-main-widget.ref.ui create mode 100644 testsuite/reftests/overlay-no-main-widget.ui diff --git a/gtk/gtkoverlay.c b/gtk/gtkoverlay.c index d10bafe64e..c7c3e27887 100644 --- a/gtk/gtkoverlay.c +++ b/gtk/gtkoverlay.c @@ -214,8 +214,8 @@ gtk_overlay_get_main_widget_allocation (GtkOverlay *overlay, { main_alloc.x = 0; main_alloc.y = 0; - main_alloc.width = 1; - main_alloc.height = 1; + main_alloc.width = gtk_widget_get_allocated_width (GTK_WIDGET (overlay)); + main_alloc.height = gtk_widget_get_allocated_height (GTK_WIDGET (overlay)); } if (main_alloc_out) @@ -325,10 +325,8 @@ gtk_overlay_size_allocate (GtkWidget *widget, GTK_WIDGET_CLASS (gtk_overlay_parent_class)->size_allocate (widget, allocation); main_widget = gtk_bin_get_child (GTK_BIN (overlay)); - if (!main_widget || !gtk_widget_get_visible (main_widget)) - return; - - gtk_widget_size_allocate (main_widget, allocation); + if (main_widget && gtk_widget_get_visible (main_widget)) + gtk_widget_size_allocate (main_widget, allocation); for (children = priv->children; children; children = children->next) gtk_overlay_child_allocate (overlay, children->data); diff --git a/testsuite/reftests/Makefile.am b/testsuite/reftests/Makefile.am index 19c1a5e2fb..5f84f8c81f 100644 --- a/testsuite/reftests/Makefile.am +++ b/testsuite/reftests/Makefile.am @@ -314,6 +314,8 @@ testdata = \ opacity.css \ opacity.ui \ opacity.ref.ui \ + overlay-no-main-widget.ref.ui \ + overlay-no-main-widget.ui \ paned-undersized.css \ paned-undersized.ref.ui \ paned-undersized.ui \ diff --git a/testsuite/reftests/overlay-no-main-widget.ref.ui b/testsuite/reftests/overlay-no-main-widget.ref.ui new file mode 100644 index 0000000000..a895631761 --- /dev/null +++ b/testsuite/reftests/overlay-no-main-widget.ref.ui @@ -0,0 +1,33 @@ + + + + + + False + + + 100 + 100 + True + False + + + True + False + vertical + + + + + + + + True + False + VISIBLE + + + + + + diff --git a/testsuite/reftests/overlay-no-main-widget.ui b/testsuite/reftests/overlay-no-main-widget.ui new file mode 100644 index 0000000000..08abb83bd0 --- /dev/null +++ b/testsuite/reftests/overlay-no-main-widget.ui @@ -0,0 +1,26 @@ + + + + + + False + + + 100 + 100 + True + False + + + + + + True + False + VISIBLE + + + + + + -- 2.30.2